ãããã¯ãŒã¯ã¢ãŒããã¯ãã£ã®é²åãæ¢æ±ïŒã¿ã€ãã»ãŒããªãã©ãã£ãã¯ç®¡çãã°ããŒãã«ã·ã¹ãã ã®ä¿¡é Œæ§ãã»ãã¥ãªãã£ãããã©ãŒãã³ã¹ãåäžãããæ¹æ³ã
ãžã§ããªãã¯ãã©ãã£ãã¯ç®¡çïŒã¿ã€ãã»ãŒããªãããŒæé©åãžã®ãã©ãã€ã ã·ãã
忣ã·ã¹ãã ã®äžçã§ã¯ããã©ãã£ãã¯ã®æµãã管çããããšã¯åºæ¬çãªèª²é¡ã§ããæ°å幎ã«ããããç§ãã¡ã¯ãããã¯ãŒã¯ãã±ãããã«ãŒãã£ã³ã°ããã©ã³ã¹èª¿æŽãä¿è·ããããã®é«åºŠãªã·ã¹ãã ãèšèšããŠããŸãããã·ã³ãã«ãªããŒããŠã§ã¢ããŒããã©ã³ãµãŒãããææ°ã®æ©èœè±å¯ãªãµãŒãã¹ã¡ãã·ã¥ãŸã§ãç®æšã¯äžè²«ããŠç¶æãããŠããŸãããããã¯ããªã¯ãšã¹ãAããµãŒãã¹Bã«ä¿¡é Œæ§ãšå¹çæ§ããã£ãŠå°éããããã«ããããšã§ãããããããããã®ã·ã¹ãã ã®ã»ãšãã©ã«ã¯ã埮åŠã§ãããªããæ·±ãéçããããŸããããããã¯äž»ã«ã¿ã€ãã¢ã°ãã¹ãã£ãã¯ã§ãããšããããšã§ããã¢ããªã±ãŒã·ã§ã³ããŒã¿ãäžéæãªãã€ããŒããšããŠæ±ããIPã¢ãã¬ã¹ãããŒããªã©ã®L3/L4ã¡ã¿ããŒã¿ããããã¯ããããHTTPããããŒã®ãããªæµ ãL7ããŒã¿ã«åºã¥ããŠæææ±ºå®ãè¡ããŸããããã¯å€ããããšããŠããŸãã
ç§ãã¡ã¯ãã©ãã£ãã¯ç®¡çã«ããããã©ãã€ã ã·ããã®ç¬æžéã«ç«ã£ãŠããŸããããã¯ãã¿ã€ãã¢ã°ãã¹ãã£ãã¯ããã¿ã€ãã¢ãŠã§ã¢ãªäžçãžã®ç§»è¡ã§ããç§ãã¡ãã¿ã€ãã»ãŒããããŒæé©åãšåŒã¶ãã®é²åã¯ãããŒã¿ã³ã³ãã©ã¯ããšã¹ããŒãã®æŠå¿µããããã¯ãŒã¯ã€ã³ãã©ã¹ãã©ã¯ãã£èªäœã«çŽæ¥åã蟌ãããšã«ãããŸããAPIã²ãŒããŠã§ã€ããµãŒãã¹ã¡ãã·ã¥ããšããžãããã·ããã«ãŒãã£ã³ã°ããŠããããŒã¿ã®æ§é ãšæå³ãçè§£ã§ããããã«ããããšã§ããããã¯åãªãåŠè¡çãªæŒç¿ã§ã¯ãããŸãããæ¬¡äžä»£ã®å埩åããããå®å šã§ãã¹ã±ãŒã©ãã«ãªã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å®çšçãªå¿ èŠæ§ã§ãããã®èšäºã§ã¯ããã©ãã£ãã¯å±€ã§ã®ã¿ã€ãå®å šæ§ããªãæ°ããªããã³ãã£ã¢ã§ããã®ãããã®ãããªã·ã¹ãã ãã©ã®ããã«æ§ç¯ããã®ãããããŠããã«ãã£ãŠããããããå€é©çãªã¡ãªããã«ã€ããŠæ¢ããŸãã
ãã±ããããã·ã¥ããL7èªèãžã®æ
ã¿ã€ãå®å šæ§ã®éèŠæ§ãçè§£ããã«ã¯ããã©ãã£ãã¯ç®¡çã®é²åãèŠãŠãããšåœ¹ç«ã¡ãŸãããã®æ ã¯ãåŸã ã«æ·±ãæ€æ»ãšã€ã³ããªãžã§ã³ã¹ã®æ ã§ããã
ãã§ãŒãº1ïŒL3/L4ããŒããã©ã³ã·ã³ã°ã®æä»£
ãŠã§ã黿æããã©ãã£ãã¯ç®¡çã¯åçŽã§ãããããŒããŠã§ã¢ããŒããã©ã³ãµãŒãã¢ããªã·ãã¯ãªãŠã§ããµãŒããŒã®ããŒã«ã«é 眮ãããŠããŸããããã®ä»äºã¯ãã©ãŠã³ãããã³ãæå°æ¥ç¶æ°ãªã©ã®åçŽãªã¢ã«ãŽãªãºã ã«åºã¥ããŠãçä¿¡TCPæ¥ç¶ã忣ãããããšã§ãããããã¯ãOSIã¢ãã«ã®ã¬ã€ã€ãŒ3ïŒIPïŒããã³4ïŒTCP/UDPïŒã§äž»ã«åäœããŸãããããŒããã©ã³ãµãŒã¯ãHTTPãJSONããŸãã¯gRPCã®æŠå¿µãæã£ãŠããŸããã§ãããæ¥ç¶ãšãã±ãããèŠãã ãã§ãããããã¯åœæå¹æçã§ããããã¢ããªã±ãŒã·ã§ã³ãããè€éã«ãªãã«ã€ããŠããã®éçãæããã«ãªããŸããã
ãã§ãŒãº2ïŒL7ã€ã³ããªãžã§ã³ã¹ã®å°é 
ãã€ã¯ããµãŒãã¹ãšè€éãªAPIã®åºçŸã«ãããåçŽãªæ¥ç¶ã¬ãã«ã®ãã©ã³ã¹èª¿æŽã ãã§ã¯äžååã«ãªããŸãããã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ããŒã¿ã«åºã¥ããŠã«ãŒãã£ã³ã°ã®æææ±ºå®ãè¡ãå¿ èŠããããŸãããããã«ãããL7ãããã·ãšã¢ããªã±ãŒã·ã§ã³ããªããªãŒã³ã³ãããŒã©ãŒïŒADCïŒãèªçããŸããããããã®ã·ã¹ãã ã¯ãHTTPããããŒãURLãããã³Cookieãæ€æ»ã§ããŸããã
ããã«ããã匷åãªæ°æ©èœãå¯èœã«ãªããŸããã
- ãã¹ããŒã¹ã«ãŒãã£ã³ã°ïŒ
/api/usersããŠãŒã¶ãŒãµãŒãã¹ã«ã/api/ordersãæ³šæãµãŒãã¹ã«ã«ãŒãã£ã³ã°ããŸãã - ãã¹ãããŒã¹ã«ãŒãã£ã³ã°ïŒ
emea.mycompany.comãšapac.mycompany.comã®ãã©ãã£ãã¯ãç°ãªããµãŒããŒããŒã«ã«ã«ãŒãã£ã³ã°ããŸãã - ã¹ãã£ãããŒã»ãã·ã§ã³ïŒCookieã䜿çšããŠããŠãŒã¶ãŒãåžžã«åãããã¯ãšã³ããµãŒããŒã«éä¿¡ãããããã«ããŸãã
 
NGINXãHAProxyããããŠåŸã«ã¯Envoyã®ãããªã¯ã©ãŠããã€ãã£ããããã·ããææ°ã®ã¢ãŒããã¯ãã£ã®åºç€ãšãªããŸããããããã®L7ãããã·ãæèŒãããµãŒãã¹ã¡ãã·ã¥ã¯ããããããã¹ãŠã®ãµãŒãã¹ã«ãµã€ãã«ãŒãšããŠå±éãããŠããã¿ã¹ãªã¢ããªã±ãŒã·ã§ã³å¯Ÿå¿ã®ãããã¯ãŒã¯ãã¡ããªãã¯ãäœæããããšã§ããããããã«äžæ©é²ããŸããã
æ®åããç²ç¹ïŒäžéæãªãã€ããŒã
ãã®é²æ©ã«ãããããããéèŠãªç²ç¹ãæ®ã£ãŠããŸããç§ãã¡ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã¯HTTPã¡ãœãããšããããŒãçè§£ããŠããŸãããéåžžããªã¯ãšã¹ãããã£ãã€ãŸãå®éã®ããŒã¿ãã€ããŒããäžéæãªãã€ãã®å¡ãšããŠæ±ããŸãããããã·ã¯ãContent-Type: application/jsonããããŒãæã€POSTãªã¯ãšã¹ãã/api/v1/usersã«ã«ãŒãã£ã³ã°ããŠããããšã¯ç¥ã£ãŠãããããããŸãããããã®JSONã®æ§é ãã©ãããã¹ãããç¥ããŸãããå¿
èŠãª`email`ãã£ãŒã«ãããããŸãããïŒ `user_id`ã¯ãæååã§ããã¹ãå Žåã«æŽæ°ã§ããïŒ ã¯ã©ã€ã¢ã³ãã¯ãç°ãªãæ§é ãæåŸ
ããv2ãšã³ããã€ã³ãã«v1ãã€ããŒããéä¿¡ããŠããŸããïŒ
仿¥ããã®æ€èšŒã®è² æ ã¯ã»ãŒå®å šã«ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«ããã£ãŠããŸãããã¹ãŠã®ãã€ã¯ããµãŒãã¹ã¯ãäžæ£ãªãªã¯ãšã¹ããæ€èšŒãéã·ãªã¢ã«åãããã³åŠçããå¿ èŠããããŸããããã¯ãå€ãã®åé¡ã«ã€ãªãããŸãã
- åé·ãªã³ãŒãïŒãã¹ãŠã®ãµãŒãã¹ã¯ãåãå®åçãªæ€èšŒããžãã¯ãèšè¿°ããŸãã
 - äžè²«æ§ã®ãªã宿œïŒç°ãªãããŒã ãç°ãªãèšèªã§èšè¿°ããå¯èœæ§ã®ããç°ãªããµãŒãã¹ã¯ãæ€èšŒã«ãŒã«ãäžè²«ããŠå®æœããªãå ŽåããããŸãã
 - ã©ã³ã¿ã€ã ãšã©ãŒïŒäžæ£ãªãªã¯ãšã¹ãã¯ãããã¯ãŒã¯ã®å¥¥æ·±ããŸã§æµžéãããµãŒãã¹ãã¯ã©ãã·ã¥ããããäžå¯è§£ãª500ãšã©ãŒãè¿ãããããŠããããã°ãå°é£ã«ããŸãã
 - ã»ãã¥ãªãã£ã®è匱æ§ïŒãšããžã§ã®å³æ Œãªå ¥åæ€èšŒã®æ¬ åŠã¯ãNoSQLã€ã³ãžã§ã¯ã·ã§ã³ã倧éå²ãåœãŠã®è匱æ§ãããã³ãã®ä»ã®ãã€ããŒãããŒã¹ã®æ»æãªã©ã®æ»æã®äž»èŠãªãã¯ãã«ã§ãã
 - ç¡é§ãªãªãœãŒã¹ïŒããã¯ãšã³ããµãŒãã¹ã¯ããªã¯ãšã¹ããåŠçããããã«CPUãµã€ã¯ã«ãè²»ããããããç¡å¹ã§ããããšã倿ããæåŠããå¿ èŠããããŸãã
 
ãããã¯ãŒã¯ãããŒã«ãããã¿ã€ãå®å šæ§ã®å®çŸ©
éçºè ããã¿ã€ãå®å šæ§ããèããšãåé¢é£ã®ãšã©ãŒãã³ã³ãã€ã«æã«ææããTypeScriptãRustãJavaãªã©ã®ããã°ã©ãã³ã°èšèªã飿³ããããšããããããŸãããã®ã¢ãããžãŒã¯ããã©ãã£ãã¯ç®¡çã«éåžžã«é©ããŠããŸããã¿ã€ãã»ãŒããããŒæé©åã¯ããµãŒãã¹ã®ã©ã³ã¿ã€ã ãšã©ãŒãåŒãèµ·ããåã«ãã€ã³ãã©ã¹ãã©ã¯ãã£ãšããžã§ããŒã¿ã³ã³ãã©ã¯ãéåãææããããšãç®çãšããŠããŸããããã¯ããããã¯ãŒã¯ãã³ã³ãã€ã«æãã®äžåœ¢æ ã§ãã
ãã®ã³ã³ããã¹ãã§ã®ã¿ã€ãå®å šæ§ã¯ãããã€ãã®ã³ã¢æ±ã«åºã¥ããŠæ§ç¯ãããŠããŸãã
1. ã¹ããŒãé§åã®ããŒã¿ã³ã³ãã©ã¯ã
ã¿ã€ãå®å šæ§ã®åºç€ã¯ãããŒã¿æ§é ã®æ£åŒãªå®çŸ©ã§ããããŒã ã¯ãã¢ãããã¯ãªåæãããã¥ã¡ã³ãã«é Œãã®ã§ã¯ãªããæ©æ¢°å¯èªãªã¹ããŒãå®çŸ©èšèªïŒSDLïŒã䜿çšããŠãAPIã®æç¢ºãªã³ã³ãã©ã¯ããäœæããŸãã
äžè¬çãªéžæè¢ã«ã¯ä»¥äžãå«ãŸããŸãã
- OpenAPIïŒæ§SwaggerïŒïŒRESTful APIãèšè¿°ããããã®æšæºã§ããšã³ããã€ã³ããã¡ãœããããã©ã¡ãŒã¿ãŒãããã³ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹æ¬æã®JSON/YAMLã¹ããŒããå®çŸ©ããŸãã
 - ãããã³ã«ãããã¡ïŒProtobufïŒïŒGoogleãéçºãããã€ããªã·ãªã¢ã«å圢åŒã§ãgRPCãšãã䜿çšãããŸããèšèªã«äŸåãããéåžžã«å¹ççã§ãã
 - JSONã¹ããŒãïŒJSONããã¥ã¡ã³ãã«æ³šéãä»ããæ€èšŒããããã®èªåœã§ãã
 - Apache AvroïŒããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³ãç¹ã«Apache Kafkaãšã³ã·ã¹ãã å ã§äººæ°ã®ããããŒã¿ã·ãªã¢ã«åã·ã¹ãã ã§ãã
 
ãã®ã¹ããŒãã¯ããµãŒãã¹ã®ããŒã¿ã¢ãã«ã®å¯äžã®æ å ±æºã«ãªããŸãã
2. ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ãã«ã®æ€èšŒ
éèŠãªå€åã¯ãæ€èšŒãã¢ããªã±ãŒã·ã§ã³ããã€ã³ãã©ã¹ãã©ã¯ãã£ã«ç§»è¡ããããšã§ããããŒã¿ãã¬ãŒã³ïŒAPIã²ãŒããŠã§ã€ãŸãã¯ãµãŒãã¹ã¡ãã·ã¥ãããã·ïŒã¯ãä¿è·ãããµãŒãã¹ã®ã¹ããŒãã§æ§æãããŸãããªã¯ãšã¹ããå°çãããšããããã·ã¯ããã転éããåã«2ã€ã®ã¹ãããã®ããã»ã¹ãå®è¡ããŸãã
- éã·ãªã¢ã«åïŒçã®èŠæ±æ¬æïŒJSONæååãŸãã¯Protobufãã€ããªããŒã¿ãªã©ïŒãæ§é åããã衚çŸã«è§£æããŸãã
 - æ€èšŒïŒãã®æ§é åãããããŒã¿ãç»é²ãããã¹ããŒãã«å¯ŸããŠãã§ãã¯ããŸããå¿ èŠãªãã¹ãŠã®ãã£ãŒã«ãããããŸããïŒ ããŒã¿åã¯æ£ããã§ããïŒããšãã°ã`age`ã¯æ°å€ã§ããïŒïŒ å¶çŽã«æºæ ããŠããŸããïŒããšãã°ã`country_code`ã¯å®çŸ©æžã¿ã®ãªã¹ããšäžèŽãã2æåã®æååã§ããïŒïŒ
 
æ€èšŒã«å€±æããå Žåããããã·ã¯ãæ€èšŒãšã©ãŒã«é¢ãã詳现ãå«ã説æçãª4xxãšã©ãŒïŒããšãã°ã`400 Bad Request`ïŒã§å³åº§ã«ãªã¯ãšã¹ããæåŠããŸããç¡å¹ãªãªã¯ãšã¹ãã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã«ããå°éããŸãããããã¯ãFail Fastã®ååãšããŠç¥ãããŠããŸãã
3. ã¿ã€ãã¢ãŠã§ã¢ã«ãŒãã£ã³ã°ãšããªã·ãŒé©çš
ã€ã³ãã©ã¹ãã©ã¯ãã£ãããŒã¿ã®æ§é ãçè§£ãããšãã¯ããã«ã¹ããŒããªæææ±ºå®ãè¡ãããšãã§ããŸããããã¯ãåçŽãªURLäžèŽãã¯ããã«è¶ ããŠããŸãã
- ã³ã³ãã³ãããŒã¹ã«ãŒãã£ã³ã°ïŒãã€ããŒãå ã®ç¹å®ã®ãã£ãŒã«ãã®å€ã«åºã¥ããŠã«ãŒãã£ã³ã°ã«ãŒã«ãäœæã§ããŸããããšãã°ãã`request.body.user.tier == 'premium'`ã®å Žåã髿§èœã®`premium-cluster`ã«ã«ãŒãã£ã³ã°ããŸãããã以å€ã®å Žåã¯ã`standard-cluster`ã«ã«ãŒãã£ã³ã°ããŸããã ããã¯ãç°¡åã«çç¥ãŸãã¯ã¹ããŒãã£ã³ã°ã§ããããããŒã«äŸåãããããã¯ããã«å ç¢ã§ãã
 - ãã现ããããªã·ãŒé©çšïŒã»ãã¥ãªãã£ããªã·ãŒãšããžãã¹ããªã·ãŒããå€ç§ç粟床ã§é©çšã§ããŸããããšãã°ãWebã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ïŒWAFïŒã«ãŒã«ã¯ãããªã¯ãšã¹ããå éšIPç¯å²ããçºä¿¡ãããŠããªãéãã`role`ãã£ãŒã«ãã`admin`ã«å€æŽãããŠããå Žåã`update_user_profile`ãªã¯ãšã¹ãããããã¯ãããããã«æ§æã§ããŸãã
 - ãã©ãã£ãã¯ã·ããã£ã³ã°ã®ã¹ããŒãããŒãžã§ãã³ã°ïŒç§»è¡äžã«ãã¹ããŒãããŒãžã§ã³ã«åºã¥ããŠãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ã§ããŸããã`OrderSchema v1`ã«æºæ ãããªã¯ãšã¹ãã¯ã¬ã¬ã·ãŒã¢ããªã¹ã«ç§»åãã`OrderSchema v2`ã«äžèŽãããªã¯ãšã¹ãã¯æ°ãããã€ã¯ããµãŒãã¹ã«éä¿¡ãããŸããã ããã«ãããããå®å šã§å¶åŸ¡ãããããŒã«ã¢ãŠããå¯èœã«ãªããŸãã
 
ã¿ã€ãã»ãŒããªãã©ãã£ãã¯ç®¡çã·ã¹ãã ã®æ§ç¯
ãã®ãããªã·ã¹ãã ãå®è£ ããã«ã¯ãã¹ããŒãã¬ãžã¹ããªãæŽç·Žãããã³ã³ãããŒã«ãã¬ãŒã³ãã€ã³ããªãžã§ã³ããªããŒã¿ãã¬ãŒã³ã®3ã€ã®äž»èŠã³ã³ããŒãã³ããåããããŸãšãŸãã®ããã¢ãŒããã¯ãã£ãå¿ èŠã§ãã
1. ã¹ããŒãã¬ãžã¹ããªïŒçå®ã®æ å ±æº
ã¹ããŒãã¬ãžã¹ããªã¯ãçµç¹ã®ãã¹ãŠã®ãµãŒãã¹ã®ãã¹ãŠã®ããŒã¿ã³ã³ãã©ã¯ãïŒã¹ããŒãïŒãä¿åããã³ããŒãžã§ã³ç®¡çããäžå åããããªããžããªã§ããããã¯ããµãŒãã¹ãéä¿¡ããæ¹æ³ã«é¢ããçŽãããªãæ å ±æºãšããŠæ©èœããŸãã
- éäžåïŒãã¹ãŠã®ããŒã ãã¹ããŒããæ€åºããååŸããããã®åäžã®å ŽæãæäŸããã¹ããŒãã®æçåãé²ããŸãã
 - ããŒãžã§ã³ç®¡çïŒæéã®çµéãšãšãã«ã¹ããŒãã®é²åã管çããŸãïŒããšãã°ãv1ãv2ãv2.1ïŒãããã¯ãåŸæ¹äºææ§ãšåæ¹äºææ§ãåŠçããããã«éèŠã§ãã
 - äºææ§ãã§ãã¯ïŒåªããã¹ããŒãã¬ãžã¹ããªã¯ãäºææ§ã«ãŒã«ãé©çšã§ããŸããããšãã°ãæ¢åã®ã¯ã©ã€ã¢ã³ããå£ãæ°ããã¹ããŒãããŒãžã§ã³ïŒå¿ é ãã£ãŒã«ãã®åé€ãªã©ïŒãéçºè ãããã·ã¥ã§ããªãããã«ããããšãã§ããŸããã¢ããã®Confluentã®ã¹ããŒãã¬ãžã¹ããªã¯ãããŒã¿ã¹ããªãŒãã³ã°ã®äžçã§ããç¥ãããŠããããããã®æ©èœãæäŸããŠããŸãã
 
2. ã³ã³ãããŒã«ãã¬ãŒã³ïŒæäœã®é è³
ã³ã³ãããŒã«ãã¬ãŒã³ã¯ãæ§æãšç®¡çã®ããã§ããããã¯ããªãã¬ãŒã¿ãŒãšéçºè ãããªã·ãŒãšã«ãŒãã£ã³ã°ã«ãŒã«ãå®çŸ©ããå Žæã§ããã¿ã€ãã»ãŒãã·ã¹ãã ã§ã¯ãã³ã³ãããŒã«ãã¬ãŒã³ã®åœ¹å²ãåäžããŠããŸãã
- ããªã·ãŒå®çŸ©ïŒã`payment-service`ãžã®ãã¹ãŠã®ãã©ãã£ãã¯ã`PaymentRequestSchema v3`ã«å¯ŸããŠæ€èšŒããããªã©ã®äžäœã¬ãã«ã®æå³ãå®çŸ©ããããã®APIãŸãã¯UIãæäŸããŸãã
 - ã¹ããŒãçµ±åïŒå¿ èŠãªã¹ããŒãããã«ããããã«ãã¹ããŒãã¬ãžã¹ããªãšçµ±åããŸãã
 - æ§æã³ã³ãã€ã«ïŒäžäœã¬ãã«ã®æå³ãšå¯Ÿå¿ããã¹ããŒããååŸããããŒã¿ãã¬ãŒã³ãããã·ãçè§£ã§ããäœã¬ãã«ã®å ·äœçãªæ§æã«ã³ã³ãã€ã«ããŸããããã¯ããããã¯ãŒã¯ã³ã³ãã€ã«æãã¹ãããã§ãããªãã¬ãŒã¿ãŒãååšããªããã£ãŒã«ãïŒããšãã°ã誀åã®ãã`request.body.user.t_ier`ïŒãåç §ããã«ãŒã«ãäœæããããšãããšãã³ã³ãããŒã«ãã¬ãŒã³ã¯æ§ææã«ãããæåŠã§ããŸãã
 - æ§æé åžïŒã³ã³ãã€ã«ãããæ§æããããŒã¿ãã¬ãŒã³ã®ãã¹ãŠã®é¢é£ãããã·ã«å®å šã«ããã·ã¥ããŸããIstioããã³Open Policy AgentïŒOPAïŒã¯ã匷åãªã³ã³ãããŒã«ãã¬ãŒã³ãã¯ãããžãŒã®äŸã§ãã
 
3. ããŒã¿ãã¬ãŒã³ïŒæœè¡è
ããŒã¿ãã¬ãŒã³ã¯ããã¹ãŠã®ãªã¯ãšã¹ãã®ãã¹ã«ãããããã¯ãŒã¯ãããã·ïŒããšãã°ãEnvoyãNGINXïŒã§æ§æãããŠããŸãããããã¯ãã³ã³ãããŒã«ãã¬ãŒã³ããæ§æãåä¿¡ããã©ã€ããã©ãã£ãã¯ã§ã«ãŒã«ãå®è¡ããŸãã
- åçæ§æïŒãããã·ã¯ãæ¥ç¶ãããããããããšãªããæ§æãåçã«æŽæ°ã§ããå¿ èŠããããŸããEnvoyã®xDS APIã¯ããã®ãŽãŒã«ãã¹ã¿ã³ããŒãã§ãã
 - 髿§èœæ€èšŒïŒæ€èšŒã«ã¯ãªãŒããŒãããã远å ãããŸãããããã·ã¯ãã¬ã€ãã³ã·ãæå°éã«æããããã«ããã€ããŒããéã·ãªã¢ã«åããŠæ€èšŒããããšã«éåžžã«å¹ççã§ããå¿ èŠããããŸããããã¯å€ãã®å ŽåãC ++ãRustãªã©ã®èšèªã§èšè¿°ããã髿§èœã©ã€ãã©ãªã䜿çšããŠå®çŸãããWebAssemblyïŒWasmïŒãä»ããŠçµ±åãããå ŽåããããŸãã
 - è±å¯ãªãã¬ã¡ããªïŒæ€èšŒã®å€±æã«ãããªã¯ãšã¹ããæåŠãããå Žåããããã·ã¯è©³çްãªãã°ãšã¡ããªãã¯ãåºåããå¿ èŠããããŸãããã®ãã¬ã¡ããªã¯ããããã°ãšç£èŠã«éåžžã«åœ¹ç«ã¡ãããŒã ã¯èª€åäœããŠããã¯ã©ã€ã¢ã³ããçµ±åã®åé¡ããã°ããç¹å®ã§ããŸãã
 
ã¿ã€ãã»ãŒããããŒæé©åã®å€é©çå©ç¹
ãã©ãã£ãã¯ç®¡çã«ã¿ã€ãã»ãŒããªã¢ãããŒããæ¡çšããããšã¯ãå¥ã®æ€èšŒã¬ã€ã€ãŒã远å ããã ãã§ãªãã忣ã·ã¹ãã ã®æ§ç¯ãšéçšæ¹æ³ãæ ¹æ¬çã«æ¹åããããšã§ãã
ä¿¡é Œæ§ãšå埩åã®åäž
ã³ã³ãã©ã¯ãã®å®æœããããã¯ãŒã¯ãšããžã«ç§»è¡ããããšã«ããã匷åãªé²åŸ¡å¢çãäœæããŸããç¡å¹ãªããŒã¿ã¯ãé£éçãªé害ãåŒãèµ·ããåã«åæ¢ããŸããããŒã¿æ€èšŒã«å¯Ÿãããã®ãã·ããã¬ãããã¢ãããŒãã¯ããšã©ãŒãæ©æã«ææããã蚺æã容æã«ãªãã圱é¿ãå°ãªããªãããšãæå³ããŸãããµãŒãã¹ã¯ãåä¿¡ãããã¹ãŠã®ãªã¯ãšã¹ããé©åã«åœ¢æãããŠããããšãä¿¡é Œã§ãããããããžãã¹ããžãã¯ã«ã®ã¿éäžã§ãããããããå埩åãé«ããªããŸãã
å€§å¹ ã«æ¹åãããã»ãã¥ãªãã£äœå¶
ãŠã§ãã®è匱æ§ã®å€§éšåã¯ãäžé©åãªå ¥åæ€èšŒã«èµ·å ããŸãããšããžã§å³å¯ãªã¹ããŒããé©çšããããšã«ãããããã©ã«ãã§æ»æã®ãã¹ãŠã®ã¯ã©ã¹ãç¡å¹ã«ããŸãã
- ã€ã³ãžã§ã¯ã·ã§ã³æ»æïŒãã£ãŒã«ããã¹ããŒãã§ããŒã«å€ãšããŠå®çŸ©ãããŠããå Žåãæªæã®ããã³ãŒããå«ãæååãæ³šå ¥ããããšã¯ã§ããŸããã
 - ãµãŒãã¹æåŠïŒDoSïŒïŒã¹ããŒãã¯ãé åã®é·ããæååã®ãµã€ãºã«é¢ããå¶çŽãé©çšããé倧ãªãã€ããŒãã䜿çšããŠã¡ã¢ãªã䜿ãæããæ»æãé²ãããšãã§ããŸãã
 - ããŒã¿ã®æŒæŽ©ïŒã¬ã¹ãã³ã¹ã¹ããŒããå®çŸ©ããŠããµãŒãã¹ã誀ã£ãŠæ©å¯ãã£ãŒã«ãããªãŒã¯ããªãããã«ããããšãã§ããŸãããããã·ã¯ãã¬ã¹ãã³ã¹ãã¯ã©ã€ã¢ã³ãã«éä¿¡ãããåã«ãæºæ ããŠããªããã£ãŒã«ãããã¹ãŠãã£ã«ã¿ãªã³ã°ã§ããŸãã
 
éçºãšãªã³ããŒãã£ã³ã°ã®å é
ããŒã¿ã³ã³ãã©ã¯ããæç€ºçã§ãã€ã³ãã©ã¹ãã©ã¯ãã£ã«ãã£ãŠå®æœãããŠããå Žåãéçºè ã®çç£æ§ãåäžããŸãã
- æç¢ºãªã³ã³ãã©ã¯ãïŒããã³ããšã³ãããã³ããã¯ãšã³ãããŒã ããŸãã¯ãµãŒãã¹éã®ããŒã ã¯ãæç¢ºãªã³ã³ãã©ã¯ããçžæã«äœæ¥ã§ããŸããããã«ãããçµ±åã®æ©æŠãšèª€è§£ã軜æžãããŸãã
 - èªåçæãããã³ãŒãïŒã¹ããŒãã䜿çšããŠãè€æ°ã®èšèªã§ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªããµãŒããŒã®ã¹ã¿ããããã³ããã¥ã¡ã³ããèªåçæã§ãããããéçºæéãå€§å¹ ã«ç¯çŽã§ããŸãã
 - é«éãããã°ïŒçµ±åã倱æããå Žåãéçºè ã¯ããµãŒãã¹ããã®äžè¬çãª500ãšã©ãŒã§ã¯ãªãããããã¯ãŒã¯ã¬ã€ã€ãŒããã®å³æãã€æ£ç¢ºãªãã£ãŒãããã¯ïŒããã£ãŒã«ã'productId'ããããŸãããïŒãååŸããŸãã
 
å¹ççã§æé©åãããã·ã¹ãã
æ€èšŒããéåžžã¯C ++ã§èšè¿°ãããé«åºŠã«æé©åããããµã€ãã«ãŒã§ããå ±éã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã«ãªãããŒãããããšã¯ãPythonãRubyãªã©ã®ããé ãã€ã³ã¿ãŒããªã¿èšèªã§èšè¿°ãããå¯èœæ§ã®ãããã¹ãŠã®ãµãŒãã¹ãåãã¿ã¹ã¯ãå®è¡ããããšãããã¯ããã«å¹ççã§ããããã«ãããããžãã¹ããžãã¯ã«éèŠãªã¢ããªã±ãŒã·ã§ã³CPUãµã€ã¯ã«ãè§£æŸãããŸããããã«ãã¡ãã·ã¥ã«ãã£ãŠé©çšãããProtobufã®ãããªå¹ççãªãã€ããªåœ¢åŒã䜿çšãããšãåé·ãªJSONãšæ¯èŒããŠããããã¯ãŒã¯åž¯åå¹ ãšã¬ã€ãã³ã·ãå€§å¹ ã«åæžã§ããŸãã
課é¡ãšçŸå®äžçã®èæ ®äºé
ããžã§ã³ã¯é åçã§ãããå®è£ ãžã®éã«ã¯èª²é¡ããããŸãããã®ã¢ãŒããã¯ãã£ãæ€èšããŠããçµç¹ã¯ãããããèšç»ããå¿ èŠããããŸãã
1. ããã©ãŒãã³ã¹ãªãŒããŒããã
ãã€ããŒãã®éã·ãªã¢ã«åãšæ€èšŒã¯ç¡æã§ã¯ãããŸããããã¹ãŠã®ãªã¯ãšã¹ãã«ã¬ã€ãã³ã·ã远å ãããŸãããã®åœ±é¿ã¯ããã€ããŒããµã€ãºãã¹ããŒãã®è€éããããã³ãããã·ã®æ€èšŒãšã³ãžã³ã®å¹çã«ãã£ãŠç°ãªããŸããéåžžã«äœãã¬ã€ãã³ã·ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®ãªãŒããŒããããæžå¿µäºé ãšãªãå¯èœæ§ããããŸãã軜æžçã«ã¯ä»¥äžãå«ãŸããŸãã
- å¹ççãªãã€ããªåœ¢åŒïŒProtobufïŒã®äœ¿çšã
 - 髿§èœWasmã¢ãžã¥ãŒã«ã§ã®æ€èšŒããžãã¯ã®å®è£ ã
 - éèŠãªãšã³ããã€ã³ãã«ã®ã¿ããŸãã¯ãµã³ããªã³ã°ããŒã¹ã§æ€èšŒãéžæçã«é©çšããã
 
2. éçšäžã®è€éã
ã¹ããŒãã¬ãžã¹ããªãšããè€éãªã³ã³ãããŒã«ãã¬ãŒã³ãå°å ¥ãããšã管çãç£èŠãããã³ä¿å®ããæ°ããã³ã³ããŒãã³ãã远å ãããŸããããã«ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®èªååãšããŒã ã®å°éç¥èãžã®æè³ãå¿ èŠã§ãããªãã¬ãŒã¿ãŒã®æåã®åŠç¿æ²ç·ã¯æ¥åŸé ã«ãªãå¯èœæ§ããããŸãã
3. ã¹ããŒãã®é²åãšã¬ããã³ã¹
ããã¯ãããããæå€§ã®ç€ŸäŒæè¡ç課é¡ã§ãã誰ãã¹ããŒããææããŠããŸããïŒ å€æŽã¯ã©ã®ããã«ææ¡ãã¬ãã¥ãŒãããã³ãããã€ãããŸããïŒ ã¯ã©ã€ã¢ã³ããå£ãããšãªãã¹ããŒãã®ããŒãžã§ã³ç®¡çãã©ã®ããã«ç®¡çããŸããïŒ å ç¢ãªã¬ããã³ã¹ã¢ãã«ãäžå¯æ¬ ã§ããããŒã ã¯ãåŸæ¹äºææ§ãšåæ¹äºææ§ã®ããã¹ããŒã倿Žã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠæè²ãåããå¿ èŠããããŸããã¹ããŒãã¬ãžã¹ããªã¯ããããã®ã¬ããã³ã¹ã«ãŒã«ãé©çšããããã®ããŒã«ãæäŸããå¿ èŠããããŸãã
4. ããŒã«ãšã³ã·ã¹ãã
ãã¹ãŠã®åã ã®ã³ã³ããŒãã³ãïŒããŒã¿ãã¬ãŒã³çšã®Envoyãã¹ããŒãçšã®OpenAPI / Protobufãããªã·ãŒçšã®OPAïŒã¯ååšããŸãããã¿ã€ãã»ãŒããªãã©ãã£ãã¯ç®¡çã®ããã®å®å šã«çµ±åããããããã«äœ¿çšã§ãããœãªã¥ãŒã·ã§ã³ã¯ãŸã ç»å ŽããŠããŸãããäž»èŠãªã°ããŒãã«ãã¯ãããžãŒäŒæ¥ãªã©ãå€ãã®çµç¹ã¯ããã®ããŒã«ã®éèŠãªéšåã瀟å ã§æ§ç¯ããå¿ èŠããããŸããããã ãããªãŒãã³ãœãŒã¹ã³ãã¥ããã£ã¯æ¥éã«ãã®æ¹åã«é²ãã§ããããµãŒãã¹ã¡ãã·ã¥ãããžã§ã¯ãã¯ããŸããŸãæŽç·Žãããæ€èšŒæ©èœãä»å ããŠããŸãã
æªæ¥ã¯ã¿ã€ãã¢ãŠã§ã¢
ã¿ã€ãã¢ã°ãã¹ãã£ãã¯ããã¿ã€ãã»ãŒããªãã©ãã£ãã¯ç®¡çãžã®ç§»è¡ã¯ããã€ã§ã¯ãªãããã€å®çŸããããšããåé¡ã§ããããã¯ããããã¯ãŒã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã®è«ççãªæçã衚ããŠãããåãªããã±ããããã·ã£ãŒããã忣ã·ã¹ãã ã®ã€ã³ããªãžã§ã³ãã§ã³ã³ããã¹ã察å¿ã®ã¬ãŒãã£ã¢ã³ãžãšå€è²ããŠããŸããããŒã¿ã³ã³ãã©ã¯ãããããã¯ãŒã¯ãã¡ããªãã¯ã«çŽæ¥åã蟌ãããšã«ãããèšèšäžããä¿¡é Œæ§ãé«ããããã©ã«ãã§ããå®å šã§ãéçšäžããå¹ççãªã·ã¹ãã ãæ§ç¯ããŸãã
ãã®æ ã«ã¯ãããŒã«ãã¢ãŒããã¯ãã£ãæåãžã®æŠç¥çæè³ãå¿ èŠã§ããããã¯ãããŒã¿ã¹ããŒããåãªãããã¥ã¡ã³ãã§ã¯ãªããã€ã³ãã©ã¹ãã©ã¯ãã£ã®ç¬¬äžçŽã®ã宿œå¯èœãªåžæ°ãšããŠæ±ãããšãèŠæ±ããŸãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã®æ¡åŒµãéçºè ã®éåºŠã®æé©åããããŠçã«å埩åã®ããã·ã¹ãã ã®æ§ç¯ãçå£ã«èããŠããã°ããŒãã«ãªçµç¹ã«ãšã£ãŠãã¿ã€ãã»ãŒããããŒæé©åã®æ¢æ±ãéå§ããææã¯ä»ã§ãããã©ãã£ãã¯ç®¡çã®æªæ¥ã¯ãããŒã¿ãã«ãŒãã£ã³ã°ããã ãã§ãªãããããçè§£ããŸãã